package com.clock.in.controller;

import com.clock.in.entity.PlatPunch;
import com.clock.in.vo.AjaxResult;
import org.gavaghan.geodesy.Ellipsoid;
import org.gavaghan.geodesy.GeodeticCalculator;
import org.gavaghan.geodesy.GeodeticCurve;
import org.gavaghan.geodesy.GlobalCoordinates;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.*;

/**
 * @author yinxing
 * @date 2022-09-14
 */
@RestController
public class ClockInController {

    /*
    活动定位打卡功能 */
    @PostMapping(value = "/getPunch")
    public AjaxResult getPunch(@RequestBody PlatPunch platPunch) {
        //1、设置目的地经度
        String longitudeS = "116.40355";
        //设置目的纬度
        String latitudeS = "39.9239";
        // 2、由前端传过来的用户所在位置 经纬度
        String longitudeT = platPunch.getLongitude();
        String latitudeT = platPunch.getLatitude();
        // 3、对比
        GlobalCoordinates source = new GlobalCoordinates(Double.parseDouble(latitudeS), Double.parseDouble(longitudeS));
        GlobalCoordinates target = new GlobalCoordinates(Double.parseDouble(latitudeT), Double.parseDouble(longitudeT));
        //这是两种坐标系计算方法，这是第一种坐标系计算方法（我们用的这种）
        double geoCurve = getDistanceMeter(source, target, Ellipsoid.Sphere);
        //这是两种坐标系计算方法，这是第二种坐标系计算方法
        double geoCurve2 = getDistanceMeter(source, target, Ellipsoid.WGS84);
        System.out.println(geoCurve + "----------" + geoCurve2);
        //如果用户和目的地位置想吃2千米，在不能打卡；
        if (geoCurve > 2000) {
            return AjaxResult.success("不在固定范围内");
        } else {
            System.out.println("能打卡");
        }
        return AjaxResult.success("打卡成功");
    }

    /* 经纬度计算工具类*/
    public static double getDistanceMeter(GlobalCoordinates gpsFrom, GlobalCoordinates gpsTo, Ellipsoid ellipsoid) {
        //创建GeodeticCalculator，调用计算方法，传入坐标系、经纬度用于计算距离
        GeodeticCurve geoCurve = new GeodeticCalculator().calculateGeodeticCurve(ellipsoid, gpsFrom, gpsTo);
        return geoCurve.getEllipsoidalDistance();
    }


}
